/**
 * @addtogroup num_convert.h
 * num_convert.h
 * @{
 */
/**
 * @file ofc_num_convert.h
 * @brief 数字转换库 
 * @note 
 * @author Leo
 * @date 2020-9-1
 * @version 1.0

 * @par          修改日志
 * <table>
 * <tr><th>Date    <th>Version  <th>Author    <th>Description
 * <tr><td>2020-9-1<td>1.0      <td>Leo       <td>创建初始版本
 * @copyright 杭州鸿泉物联网技术股份有限公司
 */

#ifndef _OFC_NUM_CONVERT_H_
#define _OFC_NUM_CONVERT_H_

#include "ofc_types.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * 字节转字符串,如0x1 -> '01'
 * @param data: 输入数据
 * @param buf: 输出缓冲区,缓冲区大小必须>=2字节
 * @return 无返回值
 */
void OfByteToHex(const Byte data, char *buf);

/**
 * 字(2字节)转字符串,如0x234 -> '0234'
 * @param data: 输入数据
 * @param buf: 输出缓冲区,缓冲区大小必须>=4字节
 * @return 无返回值
 */
void OfWordToHex(const Word data, char *buf);

/**
 * 双字(4字节)转字符串,如0x123456 -> '00123456'
 * @param data: 输入数据
 * @param buf: 输出缓冲区,缓冲区大小必须>=8字节
 * @return 无返回值
 */
void OfDwordToHex(const DWord data, char *buf);

/**
 * 双字(4字节,无符号)转字符串,带精度.
 * @par 如:
 * - precision为0到6时  0x123456 -> '123456'
 * - precision为7时     0x123456 -> '0123456'
 * @note 输出长度由有效输出长度和精度决定; 如果输出有效长度比精度大,则按有效长度输出;
 *  否则,按精度的长度输出,且前面填充字符'0'
 * @param data: 输入数据
 * @param buf: 输出缓冲区,缓冲区大小必须足够
 * @param precision: 输出精度,参见注释
 * @return 返回实际填充到缓冲区的字节数
 */
Int32 OfIntToHex(DWord data, char *buf, Int32 precision);

/**
 * 4字(8字节,无符号)转字符串,带精度.
 * @par 如:
 * - precision为0到6时  0x123456 -> '123456'
 * - precision为7时     0x123456 -> '0123456'
 * @note 输出长度由有效输出长度和精度决定; 如果输出有效长度比精度大,则按有效长度输出;
 *  否则,按精度的长度输出,且前面填充字符'0'
 * @param data: 输入数据
 * @param buf: 输出缓冲区,缓冲区大小必须足够
 * @param precision: 输出精度,参见注解
 * @return 返回实际填充到缓冲区的字节数
 */
Int32 OfInt64ToHex(QWord data, char *buf, Int32 precision);

/**
 * 有符号整型(4字节)转字符串,带精度.如123456 -> '123456'
 * @par 如:
 * - precision为0到6时  123456 -> '123456'
 * - precision为7时     123456 -> '0123456'
 * @note 输出长度由有效输出长度和精度决定; 如果输出有效长度比精度大,则按有效长度输出;
 *            否则,按精度的长度输出,且前面填充字符'0'; \n
 *       如果data为负数,则最前面添加'-',输出缓冲区大小必须考虑这个'-'.
 * @param data: 输入数据
 * @param buf: 输出缓冲区,缓冲区大小必须足够
 * @param precision: 输出精度,参见注解
 * @return 返回实际填充到缓冲区的字节数
 */
Int32 OfIntToDec(Int32 data, char *buf, Int32 precision);

/**
 * 无符号整型(4字节)转字符串,带精度.
 * @par 如:
 * - precision为0到6时  123456 -> '123456'
 * - precision为7时     123456 -> '0123456'
 * @note 输出长度由有效输出长度和精度决定; 如果输出有效长度比精度大,则按有效长度输出;
 *  否则,按精度的长度输出,且前面填充字符'0';
 * @param data: 输入数据
 * @param buf: 输出缓冲区,缓冲区大小必须足够
 * @param precision: 输出精度,参见注解
 * @return 返回实际填充到缓冲区的字节数
 */
Int32 OfUIntToDec(UInt32 data, char *buf, Int32 precision);

#ifdef __cplusplus
}  // extern "C"
#endif

#endif //  _OFC_NUM_CONVERT_H_

/**
 * @}
 */

